package com.homedo.odin.solution.enumcode.user;

import java.util.Arrays;
import lombok.Getter;

public class UserScoreLevelEnum {

    @Getter
    enum MainPage {
        //是否有个人主页
        YES(1, "是"),
        NO(0, "否");

        private Integer dbValue;
        private String displayValue;

        MainPage(Integer dbValue, String displayValue) {
            this.dbValue = dbValue;
            this.displayValue = displayValue;
        }


        /**
         * 判断是否存在枚举dbValue
         */
        public static boolean dbValueExist(Integer dbValue) {
            return Arrays.stream(MainPage.values()).anyMatch(obj -> obj.getDbValue().equals(dbValue));
        }

        /**
         * 判断是否存在枚举displayValue
         */
        public static boolean displayValueExist(String displayValue) {
            return Arrays.stream(MainPage.values()).anyMatch(obj -> obj.getDisplayValue().equals(displayValue));
        }

        /**
         * 匹配获取对应的DisplayValue
         */
        public static String getExistDisplayValue(Integer dbValue) {
            return Arrays.stream(MainPage.values()).filter(obj -> obj.getDbValue().equals(dbValue))
                    .map(obj -> obj.getDisplayValue()).findFirst().orElse(null);
        }

    }

    @Getter
    enum Bounty {
        //是否有个人悬赏
        YES(1, "是"),
        NO(0, "否");

        private Integer dbValue;
        private String displayValue;

        Bounty(Integer dbValue, String displayValue) {
            this.dbValue = dbValue;
            this.displayValue = displayValue;
        }


        /**
         * 判断是否存在枚举dbValue
         */
        public static boolean dbValueExist(Integer dbValue) {
            return Arrays.stream(Bounty.values()).anyMatch(obj -> obj.getDbValue().equals(dbValue));
        }

        /**
         * 判断是否存在枚举displayValue
         */
        public static boolean displayValueExist(String displayValue) {
            return Arrays.stream(Bounty.values()).anyMatch(obj -> obj.getDisplayValue().equals(displayValue));
        }

        /**
         * 匹配获取对应的DisplayValue
         */
        public static String getExistDisplayValue(Integer dbValue) {
            return Arrays.stream(Bounty.values()).filter(obj -> obj.getDbValue().equals(dbValue))
                    .map(obj -> obj.getDisplayValue()).findFirst().orElse(null);
        }
    }

    @Getter
    enum Coupon {
        /*是否活动券*/
        YES(1, "是"),
        NO(0, "否");

        private Integer dbValue;
        private String displayValue;

        Coupon(Integer dbValue, String displayValue) {
            this.dbValue = dbValue;
            this.displayValue = displayValue;
        }


        /**
         * 判断是否存在枚举dbValue
         */
        public static boolean dbValueExist(Integer dbValue) {
            return Arrays.stream(Coupon.values()).anyMatch(obj -> obj.getDbValue().equals(dbValue));
        }

        /**
         * 判断是否存在枚举displayValue
         */
        public static boolean displayValueExist(String displayValue) {
            return Arrays.stream(Coupon.values()).anyMatch(obj -> obj.getDisplayValue().equals(displayValue));
        }

        /**
         * 匹配获取对应的DisplayValue
         */
        public static String getExistDisplayValue(Integer dbValue) {
            return Arrays.stream(Coupon.values()).filter(obj -> obj.getDbValue().equals(dbValue))
                    .map(obj -> obj.getDisplayValue()).findFirst().orElse(null);
        }
    }

    @Getter
    enum Gift {
        /*是否有礼物*/
        YES(1, "是"),
        NO(0, "否");

        private Integer dbValue;
        private String displayValue;

        Gift(Integer dbValue, String displayValue) {
            this.dbValue = dbValue;
            this.displayValue = displayValue;
        }


        /**
         * 判断是否存在枚举dbValue
         */
        public static boolean dbValueExist(Integer dbValue) {
            return Arrays.stream(Gift.values()).anyMatch(obj -> obj.getDbValue().equals(dbValue));
        }

        /**
         * 判断是否存在枚举displayValue
         */
        public static boolean displayValueExist(String displayValue) {
            return Arrays.stream(Gift.values()).anyMatch(obj -> obj.getDisplayValue().equals(displayValue));
        }

        /**
         * 匹配获取对应的DisplayValue
         */
        public static String getExistDisplayValue(Integer dbValue) {
            return Arrays.stream(Gift.values()).filter(obj -> obj.getDbValue().equals(dbValue))
                    .map(obj -> obj.getDisplayValue()).findFirst().orElse(null);
        }
    }
}
